package org.xyl.context;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 会话上下文管理器 - 管理会话的创建、获取和过期
 */
public class SessionContextManager {
    
    // 会话上下文存储
    private final Map<String, SessionContext> sessions = new ConcurrentHashMap<>();
    
    // 会话过期时间（毫秒）- 默认30分钟
    private final long SESSION_TIMEOUT = 30 * 60 * 1000;
    
    /**
     * 获取或创建会话
     */
    public SessionContext getOrCreateSession(String sessionId) {
        if (sessionId == null || sessionId.isEmpty()) {
            throw new IllegalArgumentException("Session ID cannot be null or empty");
        }
        
        // 清理过期会话
        cleanupExpiredSessions();
        
        return sessions.computeIfAbsent(sessionId, SessionContext::new);
    }
    
    /**
     * 清理过期会话
     */
    private void cleanupExpiredSessions() {
        long now = System.currentTimeMillis();
        sessions.entrySet().removeIf(entry -> 
            now - entry.getValue().getLastAccessedAt() > SESSION_TIMEOUT
        );
    }
    
    /**
     * 获取活跃会话数量
     */
    public int getActiveSessionCount() {
        cleanupExpiredSessions();
        return sessions.size();
    }
}